package br.unb.cic.lp.gol;

import java.util.Scanner;

/**
 * Atua como um componente de apresentacao (view), exibindo o estado atual do
 * game com uma implementacao baseada em caracteres ASCII.
 * 
 * @author rbonifacio
 */
public class GameView {
    private static final String LINE = "+-----+";
    private static final String DEAD_CELL = "|     |";
    private static final String ALIVE_CELL = "|  o  |";

    /**
     * Construtor da classe GameBoard
     */
    public GameView() {
    }

    /**
     * Atualiza o componente view (representado pela classe GameBoard),
     * possivelmente como uma resposta a uma atualiza�‹o do jogo.
     */
    public void update(int height, int width, boolean[][] cells) {
        printFirstRow(width);
        printLine(width);
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(cells[i][j] ? ALIVE_CELL : DEAD_CELL);
            }
            System.out.println("   " + i);
            printLine(width);
        }
    }

    public String printOptions(String strategy) {
        Scanner s = new Scanner(System.in);
        System.out.println("\n \n");
        System.out.println("Type of game: " + strategy);
        System.out.println("Select one of the options: \n \n");
        System.out.println("[1] Make a cell alive");
        System.out.println("[2] Next generation");
        System.out.println("[3] Trade strategy");
        System.out.println("[4] Undo");
        System.out.println("[5] Halt");

        System.out.print("\n \n Option: ");

        return s.nextLine();

    }

    public int[] makeCellAlive(int height, int width) {
        int i[] = new int[2];
        Scanner s = new Scanner(System.in);

        System.out.print("\n Inform the row number (0 - " + height + "): ");

        i[0] = s.nextInt();

        System.out.print("\n Inform the column number (0 - " + width + "): ");

        i[1] = s.nextInt();

        System.out.println(i[0]);
        System.out.println(i[1]);

        return i;
    }

    public void halt(int revivedCells, int killedCells) {
        System.out.println("\n \n");
        System.out.println("=================================");
        System.out.println("           Statistics            ");
        System.out.println("=================================");
        System.out.println("Revived cells: " + revivedCells);
        System.out.println("Killed cells: " + killedCells);
        System.out.println("=================================");
    }

    /* Imprime uma linha usada como separador das linhas do tabuleiro */
    private void printLine(int width) {
        for (int j = 0; j < width; j++) {
            System.out.print(LINE);
        }
        System.out.print("\n");
    }

    /*
     * Imprime os identificadores das colunas na primeira linha do tabuleiro
     */
    private void printFirstRow(int width) {
        System.out.println("\n \n");
        for (int j = 0; j < width; j++) {
            System.out.print("   " + j + "   ");
        }
        System.out.print("\n");
    }

    public int tradeStrategy() {
        Scanner s = new Scanner(System.in);
        System.out.println("\n \n");
        System.out.println("Select one of the types of strategy: \n \n");
        System.out.println("[1] Conway");
        System.out.println("[2] HighLife");

        System.out.print("\n \n Option: ");
        return s.nextInt();
    }
}
